package com.jmb.api.common.utils;

import com.jmb.api.common.exception.ValidUtilException;

public class ValidUtil {
    /**
     * 检查对象是否不为null
     * @param object 待检查的对象
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当对象为null时抛出
     */
    public static void notNUll(Object object, String msg) {
        if (object == null) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查字符串是否不为空（不为null且长度大于0）
     * @param s 待检查的字符串
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当字符串为null或空时抛出
     */
    public static void notEmpty(String s, String msg) {
        notNUll(s, "字符串，参数，不能为空");
        if (s.isEmpty()) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查byte数值是否在指定范围内
     * @param num 待检查的数值
     * @param min 最小值（包含）
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(byte num, int min, int max, String msg) throws ValidUtilException {
        if (num > max || num < min) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查byte数值是否在0到指定最大值范围内
     * @param num 待检查的数值
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(byte num, int max, String msg) throws ValidUtilException {
        size(num, 0, max, msg);
    }

    /**
     * 检查short数值是否在指定范围内
     * @param num 待检查的数值
     * @param min 最小值（包含）
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(short num, int min, int max, String msg) throws ValidUtilException {
        if (num > max || num < min) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查short数值是否在0到指定最大值范围内
     * @param num 待检查的数值
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(short num, int max, String msg) throws ValidUtilException {
        size(num, 0, max, msg);
    }

    /**
     * 检查int数值是否在指定范围内
     * @param num 待检查的数值
     * @param min 最小值（包含）
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(int num, int min, int max, String msg) throws ValidUtilException {
        if (num > max || num < min) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查int数值是否在0到指定最大值范围内
     * @param num 待检查的数值
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(int num, int max, String msg) throws ValidUtilException {
        size(num, 0, max, msg);
    }

    /**
     * 检查long数值是否在指定范围内
     * @param num 待检查的数值
     * @param min 最小值（包含）
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(long num, int min, int max, String msg) throws ValidUtilException {
        if (num > max || num < min) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查long数值是否在0到指定最大值范围内
     * @param num 待检查的数值
     * @param max 最大值（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当数值不在指定范围内时抛出
     */
    public static void size(long num, int max, String msg) throws ValidUtilException {
        size(num, 0, max, msg);
    }

    /**
     * 检查字符串长度是否在指定范围内
     * @param s 待检查的字符串
     * @param minLength 最小长度（包含）
     * @param maxLength 最大长度（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当字符串为null或长度不在指定范围内时抛出
     */
    public static void length(String s, int minLength, int maxLength, String msg) throws ValidUtilException {
        notNUll(s, "传入的参数不能为空");
        int sLen = s.length();
        if (sLen > maxLength || sLen < minLength) {
            throw new ValidUtilException(msg);
        }
    }

    /**
     * 检查字符串长度是否在0到指定最大长度范围内
     * @param s 待检查的字符串
     * @param maxLength 最大长度（包含）
     * @param msg 抛出异常时的错误信息
     * @throws ValidUtilException 当字符串为null或长度不在指定范围内时抛出
     */
    public static void length(String s, int maxLength, String msg) throws ValidUtilException {
        length(s, 0, maxLength, msg);
    }


}
